Implement base element and API for customizing RLib Logger#72
Merged
Conversation
|
Contributor
There was a problem hiding this comment.
Pull request overview
This pull request refactors RLib’s logger stack to support a configurable message pipeline, evolves the logger APIs to provide richer context (Logger instance + shortName) during rendering/consumption, and updates SLF4J integration and tests accordingly.
Changes:
- Evolved
rlib-logger-apicontracts (factory/service entrypoints,Logger.shortName(), andLoggerService.write(Logger, ...)) and introduced NoOps null-object replacements. - Introduced a config-driven logging pipeline in
rlib-logger-impl(config/loader/resolver + consumers/renderers) and rewiredDefaultLoggerService/DefaultLoggerto use it. - Expanded/rewrote regression tests for level threshold semantics and consumer routing.
Reviewed changes
Copilot reviewed 29 out of 29 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| rlib-logger-slf4j/src/main/java/javasabr/rlib/logger/slf4j/Slf4jLoggerFactory.java | Updates SLF4J factory to new LoggerFactory API, adds caching, exposes a LoggerService. |
| rlib-logger-slf4j/src/main/java/javasabr/rlib/logger/slf4j/Slf4jLogger.java | Implements Logger.shortName() and aligns SLF4J logger wrapper with updated API. |
| rlib-logger-slf4j-impl/src/test/java/javasabr/rlib/logger/slf4j/impl/Slf4jLoggerImplTest.java | Refactors SLF4J-impl tests to the new consumer/config pipeline. |
| rlib-logger-impl/src/test/java/javasabr/rlib/logger/impl/DefaultLoggerTest.java | Adds coverage for shortName and verifies level threshold + consumer routing behavior via config. |
| rlib-logger-impl/src/main/resources/META-INF/services/javasabr.rlib.logger.api.LoggerFactory | Switches ServiceLoader entry from the old service to the new DefaultLoggerFactory. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/FolderFileListener.java | Removes legacy listener-based file output implementation. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/DefaultLoggerService.java | Replaces listener/writer output with config-driven consumer routing + per-level consumer caching. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/DefaultLoggerFactory.java | Adds a ServiceLoader-instantiated factory that owns the DefaultLoggerService + config resolver integration. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/DefaultLogger.java | Adds shortName and caches resolved consumers per level; updates writes to pass Logger instance to service. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/LogMessageRender.java | Introduces message rendering contract for consumers. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/LogMessageConsumer.java | Introduces consumer contract for configurable routing. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/LoggerConfigResolver.java | Adds resolver for selecting an active LoggerConfig (loader-based). |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/LoggerConfigLoader.java | Adds config loader extension point. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/LoggerConfig.java | Adds core config contract for level enablement and consumer resolution. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/impl/SimpleLogMessageRender.java | Provides a default renderer including timestamp + shortName. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/impl/package-info.java | Applies JSpecify nullness defaults for config impl package. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/impl/DefaultLoggerConfigLoader.java | Provides a default config loader (root INFO + console consumer). |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/impl/DefaultLoggerConfig.java | Implements level-threshold and per-level consumer fallback semantics. |
| rlib-logger-impl/src/main/java/javasabr/rlib/logger/impl/config/impl/ConsoleMessageConsumer.java | Implements console output routing based on level (stdout vs stderr). |
| rlib-logger-api/src/test/java/javasabr/rlib/logger/api/LoggerTest.java | Updates API tests to satisfy new Logger.shortName() contract. |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/LoggerService.java | Updates service contract to accept Logger instance in write(...) and removes legacy listener/writer APIs. |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/LoggerManager.java | Updates manager to new factory API and exposes getLoggerService(). |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/LoggerLevel.java | Extends log level model with severity. |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/LoggerFactory.java | Renames make(...) to getLogger(...) and exposes getLoggerService(). |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/Logger.java | Adds shortName() to the logger contract. |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/impl/NullLoggerFactory.java | Removes legacy null logger factory implementation. |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/impl/NoOpsLoggerService.java | Adds NoOps LoggerService implementation for factories that can’t provide config. |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/impl/NoOpsLoggerFactory.java | Adds NoOps LoggerFactory fallback implementation. |
| rlib-logger-api/src/main/java/javasabr/rlib/logger/api/impl/NoOpsLogger.java | Renames null logger to NoOps logger and implements shortName(). |
|
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This branch refactors the logger stack around a configurable message pipeline and updates logger APIs to expose richer context (
Loggerinstance,shortName) during rendering/consumption. It introduces a new configuration model inrlib-logger-impl(LoggerConfig, loaders, resolver, consumers, renderers), rewiresDefaultLoggerServiceto use it, and expands regression coverage for level-threshold and consumer-routing behavior. Several API shape changes are intentional for alpha releases.Changes Summary
1. Logger API evolution (
rlib-logger-api)Logger.shortName()to the publicLoggercontract.make(...)togetLogger(...)inLoggerFactoryand updatedLoggerManagercall sites.LoggerFactory.getLoggerService()and updatedLoggerManagerto delegate level operations via that service.LoggerService.write(...)signature from(LoggerLevel, String loggerName, String logMessage)to(Logger logger, LoggerLevel level, String message).NullLogger->NoOpsLogger,NullLoggerFactory->NoOpsLoggerFactory) and addedNoOpsLoggerService.2. New configurable logger pipeline (
rlib-logger-impl)LogMessageConsumerLogMessageRenderLoggerConfigLoggerConfigLoaderLoggerConfigResolverDefaultLoggerConfigDefaultLoggerConfigLoaderConsoleMessageConsumerSimpleLogMessageRenderDefaultLoggerServiceflow with config-driven routing:LoggerConfig.configureLevels(...)LogMessageRender3. Level threshold and routing behavior fixes
INFOenablesINFO,WARNING,ERROR; notDEBUG/TRACE).TRACEconsumer catches lower-priority fallbacks).DefaultLoggerConfig.configureLevels(...)to avoid stale overrides.4.
DefaultLoggerServiceandDefaultLoggerrefactorDefaultLoggerServicenow stores loggers by full name and creates them through a unified factory path.shortNameextraction for string logger names, including trailing-dot handling.DefaultLoggercaches resolved consumers per level (trace/debug/info/warn/error) to avoid repeated config lookups during writes.FolderFileListenerwas removed as part of the old output model removal.5. SLF4J integration updates
Slf4jLoggerFactoryto the newLoggerFactorycontract (getLogger(...)) and added logger instance caching.Slf4jLogger.shortName()implementation.LoggerServiceexposure in SLF4J factory viaNoOpsLoggerService.6. Event flow diagram
7. Configuration pipeline diagrams
8. Usage samples